package com.cvcetic.ciudadverde;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.util.Log;

import com.cvcetic.ciudadverde.beans.Punto;

public class PuntosHandler {

	public List<Punto> puntosCercanos(Punto localizacion, List<Punto> puntos,
			Integer cantidad) {
		Log.d("DebugInternet",
				String.format(
						"Numero de centros con Bicis en PuntosHandler : (%d) ", puntos.size()));
		Map<Punto, Float> distancias = new HashMap<Punto, Float>();
		Float x;
		Float y;
		float misdistancias[] = new float[puntos.size()];
		int indice = 0;
		for (Punto punto : puntos) {
			x = Math.abs(localizacion.getLongitud() - punto.getLongitud());
			y = Math.abs(localizacion.getLatitud() - punto.getLatitud());
			distancias.put(punto,
					(float) Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)));
			misdistancias[indice] = (float) Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
			indice++;
		}
		boolean visitados[] = new boolean[distancias.size()];
		for (int i = 0; i < distancias.size(); i++)
		{
			visitados[i] = false;
		}
		List<Punto> ordenados = new ArrayList<Punto>();
		for (int i = 0; i < distancias.size(); i++)
		{
			float min = 100.0f;
			int miindice = -1;
			for (int j= 0; j< distancias.size(); j++)
			{
				if (visitados[j]) continue;
				if (misdistancias[j] < min)
				{
					min = misdistancias[j];
					miindice = j;
				}
			}
			ordenados.add(puntos.get(miindice));
			visitados[miindice] = true;
		}
		List<Punto> cercanos = new ArrayList<Punto>();
		for (int i = 0; i < cantidad; i++) {
			cercanos.add(ordenados.get(i));
		}
		return cercanos;
	}
}
